import cv2
import numpy as np
image=cv2.imread('weiqi.png')   #读取原图像
cv2.imshow("Input",image)       #显示原图像
img_copy=image.copy()           #复制原图像
#使用中值滤波进行降噪。5表示滤波模板的边长，其值必须为正奇数
blur_copy=cv2.medianBlur(img_copy,5)
gray=cv2.cvtColor(blur_copy,cv2.COLOR_BGR2GRAY)
#Caany边缘检测，gray为输入的原图像，50为低阈值，150为高阈值
binary=cv2.Canny(gray,50,150)
#使用霍夫变换检测直线
#binary表示输入图像，1表示距离精度,np.pi/180表示角度精度，150表示累加器阈值参数
lines=cv2.HoughLines(binary,1,np.pi/180,150)
for line in lines:
    rho,theta=line[0]       #获取霍夫直线的极坐标参数
    a=np.cos(theta)         # 计算极坐标到笛卡尔坐标的转换系数
    b=np.sin(theta)
    x0,y0=a*rho,b*rho       # 计算直线经过的基点 (x0, y0)
    pt1=(int(x0+1000*(-b)),int(y0+1000*a))      #计算线段端点
    pt2=(int(x0-1000*(-b)),int(y0-1000*a))
    cv2.line(image,pt1,pt2,(0,0,255),2)         #在原图像上绘制直线
cv2.imshow("HoughLines",image)                  #显示霍夫变换后的图像
cv2.waitKey()
cv2.destroyAllWindows()
